"""
@Author : 合肥一元数智教育科技有限公司
@Date :  2025/2/17 9:38
@Description :  函数使用细节
   def  函数名(参数列表):
        函数体

"""


# 函数定义时 可以没有参数  小括号不能省略
def printHelloPython():
    for i in range(10):
        print("Hello Python")


# 函数定义时 有一个参数
'''
def printHelloPython(str_info):
    for i in range(10):
        print(str_info)
'''


def printHelloInfo(str_info):
    for i in range(10):
        print(str_info)


#  调用函数  不能通过参数的个数 区分调用的同名函数   同名函数后定义会覆盖之前定义的函数
printHelloPython()
# printHelloPython('hello world')

printHelloInfo("hello world")


#   函数定义时 有两个或两个以上参数    参数1： 需要打印的内容  参数2： 设定打印的次数
def printHelloInfo2(str_info, number=3):
    for i in range(number):
        print(str_info)


#  调用printHelloInfo2
# printHelloInfo2("你好", 10)
#  参数的传递 默认是位置参数  TypeError: 'str' object cannot be interpreted as an integer
# printHelloInfo2(10, '你好')
# 参数的传递 可以指定将哪个值传递给哪个参数  关键词参数
# printHelloInfo2(number=3, str_info="你好")

#  打印次数 默认  参数设置默认值  number =3   有默认值的参数需要定义在没有默认值参数后面
#  默认值参数如果在函数调用时没有传递则按照默认值执行 ，如有参数传递，则按照指定实参执行
printHelloInfo2("你好", 5)


# 函数定义时 参数的个数不确定  不定参  *args   多个参数会组织成一个元组
# total = 0
def sumNumbers(*args):
    total = 0  # 局部变量   只能在函数内部使用
    for arg in args:
        total += arg
    return total  # 将计算结果返回
    # print(f'total = {total}')
    # pass  # 保证函数的语法的完整性


#  调用不定参数的函数
# sumNumbers()  # () <class 'tuple'>
# sumNumbers(1)  # (1,) <class 'tuple'>

#  判定sumNumbers  执行的结果是奇数还是偶数  name 'total' is not defined
result = sumNumbers(1, 3, 3)  # (1, 2, 3) <class 'tuple'>
print(f'result  = {result}')
#  三目运算
info = '偶数' if result % 2 == 0 else '奇数'
print(f'info = {info}')


# 函数定义时 参数的个数不确定  key = value
def fnDict(**args):
    print(args, type(args))  # {}   <class 'dict'>
    # pass


fnDict(name='John', age=23)


#  函数返回值 可以有多个吗？  可以   返回结果会被组织在一个元组中
def twoNumbers(a, b):
    return a + b, a - b


# a1 = a2 = 1
# print(a1, a2)
# a1, a2 = 3, 4
# print(a1, a2)
# a1, a2 = (3, 4)
# print(a1, a2)


print(twoNumbers(1, 2))  # (3, -1)
result1, result2 = twoNumbers(1, 2)
print(f'result1 = {result1}')
print(f'result2 = {result2}')
